package com.not.dao;

import java.io.IOException;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import oracle.jdbc.OracleTypes;

import org.apache.log4j.Logger;

import com.not.dto.NotificacionDTO;
import com.not.dto.TipoNotiDTO;

import utiles.AppProperties;
import utiles.ConexionPool;


public class NotificacionDAO {
	private static Logger log = Logger.getLogger(NotificacionDAO.class);	
    String pkgVar = (AppProperties.getProperty("aplicacion", "PACKAGE"));	
	
    public List<NotificacionDTO> setGrabaNot(String idNoti, String idTipoEvento, String Obs, String idPac, String idUser, String dg, String modi)throws SQLException, IOException{
    	Connection conn = ConexionPool.getConnectionPool();
		List<NotificacionDTO> listMatriz = new ArrayList<NotificacionDTO>();
		String a="";
		try {
			String query = "{ call "+pkgVar+".PKG_FIC_NOTIFICACION_2.setGrabaNotificacion(?,?,?,?,?,?,?,?,?) }"; 	       
			CallableStatement  stmt = conn.prepareCall(query);
			stmt.setString(1, idNoti);
			stmt.setString(2, idTipoEvento);
			stmt.setString(3, Obs);
			stmt.setString(4, idPac);
			stmt.setString(5, idUser);
			stmt.setString(6, dg);
			stmt.setString(7, modi);
			stmt.registerOutParameter(8, OracleTypes.VARCHAR);
			stmt.registerOutParameter(9, OracleTypes.CURSOR);

			stmt.execute();
			ResultSet rs = (ResultSet)stmt.getObject(9);
			while (rs.next()) {
				NotificacionDTO not = new NotificacionDTO(); 
				not.setIdNotificacion(rs.getString(1));
				not.setIdTipoNotificacion(rs.getString(2));
				not.setIdUser(rs.getString(3));
				not.setFecha(rs.getString(4));
				listMatriz.add(not);
			}
			stmt.close();
		} catch (SQLException ex) {  
			log.error("Error NotificacionDAO.setGrabaNot SQLException: " +ex.getMessage());
			System.out.println(ex.getMessage());

		} finally {
			conn.close();
			conn = null;
			
		}		
		return listMatriz;	
    }
    
	public List<TipoNotiDTO> getTiposNot() throws SQLException, IOException{
		Connection conn = ConexionPool.getConnectionPool();
		List<TipoNotiDTO> listTipoNot= new ArrayList<TipoNotiDTO>();
		try {
			String query = "{ call "+pkgVar+".PKG_FIC_NOTIFICACION_2.getAllTiposNot(?) }"; 	       
			CallableStatement  stmt = conn.prepareCall(query);
			stmt.registerOutParameter(1, OracleTypes.CURSOR);
			stmt.execute();
			ResultSet rs = (ResultSet)stmt.getObject(1);
			while (rs.next()) {
				TipoNotiDTO tipoNot = new TipoNotiDTO();
				tipoNot.setIdTipoNot(rs.getString(1));
				tipoNot.setDescripcion(rs.getString(2));		
				listTipoNot.add(tipoNot);
			}
			rs.close();
			stmt.close();
		} catch (SQLException ex) {  
			log.error("Error NotificacionesDAO.getTiposNot SQLException: " +ex.getMessage());
			System.out.println(ex.getMessage());
		} finally {
			conn.close();
			conn = null;
		}
		return listTipoNot;

	}		    

	public List<NotificacionDTO> getNotificaciones(String idPaciente) throws SQLException, IOException{
		Connection conn = ConexionPool.getConnectionPool();   
		List<NotificacionDTO> listMatriz = new ArrayList<NotificacionDTO>();
		try{
			String query = "{ call "+pkgVar+".PKG_FIC_NOTIFICACION_2.getNotificaciones(?,?) }"; 	       
			CallableStatement  stmt = conn.prepareCall(query);
			stmt.setString(1, idPaciente);
			stmt.registerOutParameter(2, OracleTypes.CURSOR);
			stmt.execute();
			ResultSet rs = (ResultSet)stmt.getObject(2);
			while (rs.next()) {
				NotificacionDTO notiDTO = new NotificacionDTO();				
				notiDTO.setIdNotificacion(rs.getString(1));
				notiDTO.setIdTipoNotificacion(rs.getString(2));
				notiDTO.setFecha(rs.getString(3));
				notiDTO.setUsuario(rs.getString(4));
				notiDTO.setObservacion(rs.getString(5));
				notiDTO.setTipoNotificacion(rs.getString(6));
				notiDTO.setDiagnosticado(rs.getString(7));
				notiDTO.setNombre(rs.getString(8));
				notiDTO.setRut(rs.getString(9));
				notiDTO.setIdUser(rs.getString(10));
				notiDTO.setStrTipo(rs.getString(12));
				listMatriz.add(notiDTO);			
			}
			rs.close();
			stmt.close();			
		}catch (Exception ex) {
			log.error("Error NotificacionesDAO.getNotificaciones SQLException: " +ex.getMessage());
			System.out.println(ex.getMessage());
		}finally{
			conn.close();
			conn = null;
		}
		return listMatriz;
	}
	public List<NotificacionDTO> getAllNotificaciones(String idPaciente) throws SQLException, IOException{
		Connection conn = ConexionPool.getConnectionPool();
		List<NotificacionDTO> listMatriz = new ArrayList<NotificacionDTO>();
		try{
			String query = "{ call "+pkgVar+".PKG_FIC_NOTIFICACION_2.getAllNotificaciones(?,?) }"; 	       
			CallableStatement  stmt = conn.prepareCall(query);
			stmt.setString(1, idPaciente);
			stmt.registerOutParameter(2, OracleTypes.CURSOR);
			stmt.execute();
			ResultSet rs = (ResultSet)stmt.getObject(2);
			while (rs.next()) {
				NotificacionDTO notiDTO = new NotificacionDTO();				
				notiDTO.setIdNotificacion(rs.getString(1));
				notiDTO.setIdTipoNotificacion(rs.getString(2));
				notiDTO.setFecha(rs.getString(3));
				notiDTO.setUsuario(rs.getString(4));
				notiDTO.setObservacion(rs.getString(5));
				notiDTO.setTipoNotificacion(rs.getString(6));
				notiDTO.setDiagnosticado(rs.getString(7));
				notiDTO.setModificar(rs.getString(8));
				notiDTO.setStrTipo(rs.getString(9));
				listMatriz.add(notiDTO);			
			}
			rs.close();
			stmt.close();			
		}catch (Exception ex) {
			log.error("Error NotificacionesDAO.getAllNotificaciones SQLException: " +ex.getMessage());
			System.out.println(ex.getMessage());
		}finally{
			conn.close();
			conn = null;
		}
		return listMatriz;
	}
	
	public List<NotificacionDTO> getNotImpr(String idUsu, String fecha) throws SQLException, IOException{
		Connection conn = ConexionPool.getConnectionPool(); 
		List<NotificacionDTO> listMatriz = new ArrayList<NotificacionDTO>();
		try{
			String query = "{ call "+pkgVar+".PKG_FIC_NOTIFICACION_2.getNotImpr(?,?,?) }"; 	       
			CallableStatement  stmt = conn.prepareCall(query);
			stmt.setString(1, idUsu);
			stmt.setString(2, fecha);
			stmt.registerOutParameter(3, OracleTypes.CURSOR);
			stmt.execute();
			ResultSet rs = (ResultSet)stmt.getObject(3);
			while (rs.next()) {
				NotificacionDTO notiDTO = new NotificacionDTO();				
				notiDTO.setIdTipoNotificacion(rs.getString(1));
				notiDTO.setIdUser(rs.getString(2));
				notiDTO.setFecha(rs.getString(3));
				notiDTO.setUsuario(rs.getString(4));
				notiDTO.setTipoNotificacion(rs.getString(5));
				notiDTO.setTextoNotificacion(rs.getString(6));
				listMatriz.add(notiDTO);			
			}
			rs.close();
			stmt.close();			
		}catch (Exception ex) {
			log.error("Error NotificacionesDAO.getNotImpr SQLException: " +ex.getMessage());
			System.out.println(ex.getMessage());
		}finally{
			conn.close();
			conn = null;
		}
		return listMatriz;
	}	
}
